<?php

class Application_Model_LecturasSistemas extends Sgit_Model
{
    protected $_name = 'lecturas_sistemas';
    protected $_primary = 'id';
    protected $_profiler = false;




    function getFechasLecturas($limit=null,$anio=null)
    {
        /*
        	$ultimas_lecturas=$this->DB->GetAll("SELECT f_lectura FROM lecturas_sistemas 
		LEFT JOIN contadores_sistemas cs ON cs.id=lecturas_sistemas.id_contador
        
		WHERE cm=1 AND f_lectura IS NOT NULL GROUP BY f_lectura order by f_lectura desc ;");
		*/

        $select = $this->getAdapter()->select();
        $select->from(array('lecturas_sistemas'),array('f_lectura'));
        $select->joinLeft('contadores_sistemas', 'contadores_sistemas.id = lecturas_sistemas.id_contador',array(''));
        $select->where('cm = ?',1);
        $select->where('f_lectura IS NOT NULL');
        $select->group('f_lectura');
        $select->order('f_lectura DESC');
        
        
        if(!is_null($anio))$select->where("YEAR(f_lectura) = ?",$anio);
        if(!is_null($limit))$select->limit($limit);

        $rows=$this->getAdapter()->fetchAll($select);
        
        $rows=$this->assocArray2($rows,'f_lectura','f_lectura');
        
        foreach($rows as &$v)
        {
            $fecha=new Zend_Date($v,Zend_Date::ISO_8601);
            
            $s=(LOCALE=='es') ? 'S'	: 'W';             
            $v=$s.$fecha->toString('ww').' '.$fecha->toString('EEE, dd MMM YYYY');
        }
        
        
        return $rows;
    }
    
    function lastFechaLectura()
    {
        $rows = $this->getFechasLecturas(1);
        $ultima_lectura=array_shift(array_keys($rows));
        return $ultima_lectura;
    }
    
    
    function isValidate($fecha)
    {
        
        Zend_Debug::dump($fecha);
        //$validado=$this->DB->getAssoc("SELECT id_zona,validado FROM lectura_sistemas_validar WHERE f_lectura='$fecha'");
/*
        $select = $this->getAdapter()->select();
        $select->from(array('lectura_sistemas_validar'),array('id_zona','validado'));
        $select->where('f_lectura = ?',$fecha);
    */
        $validado= $this->getAll(array('f_lectura = ?'=>$fecha),null,null,null,null,null,array('id_zona','validado'));
        
        Zend_Debug::dump($validado);
    }
    
    
    /*
    function lecturasFecha2($fecha,$id_zona)
    {
        
        $select = $this->getAdapter()->select();
        $select->from(array('lecturas_sistemas'),array('id_contador','potencia','potencia_instalada','uso'=>new Zend_Db_Expr('ROUND(100 * potencia / potencia_instalada,2)')));
        $select->joinLeft('contadores_sistemas', 'contadores_sistemas.id = lecturas_sistemas.id_contador',
            array('id_tipo_sistema','id_zona','umbral'));
        $select->where('cm = ?',1);
        $select->where('id_zona = ?',$id_zona);
        $select->where('f_lectura = ?',$fecha);
        $select->order('f_lectura DESC');
        $rows=$this->getAdapter()->fetchAll($select);
        

        foreach($rows as $v)
        {
              $salida[$v['id_tipo_sistema']][$v['id_contador']]=$v;
        }
        

        return $salida;
    }*/
    
    function lecturasFecha($fecha,$id_zona)
    {
        
        if(!isset($this->_lecturas[$fecha]))
        { 
            $select = $this->getAdapter()->select();
            $select->from(array('lecturas_sistemas'),array('id_contador','potencia','potencia_instalada','uso'=>new Zend_Db_Expr('ROUND(100 * potencia / potencia_instalada,2)')));
            $select->joinLeft('contadores_sistemas', 'contadores_sistemas.id = lecturas_sistemas.id_contador',
                array('id_tipo_sistema','id_zona','umbral'));
            $select->where('cm = ?',1);
            $select->where('f_lectura = ?',$fecha);
            $select->order('f_lectura DESC');
            $this->_lecturas[$fecha]=$this->getAdapter()->fetchAll($select);
            
        }

        foreach($this->_lecturas[$fecha] as $v)
        {
            if($v['id_zona']==$id_zona)  $salida[$v['id_tipo_sistema']][$v['id_contador']]=$v;
        }
        

        return $salida;
    }
    /*
    function lecturasFecha3($fecha,$id_zona)
    {
        
        if(!isset($this->_lecturas[$id_zona][$fecha]))
        { 
            $select = $this->getAdapter()->select();
            $select->from(array('lecturas_sistemas'),array('id_contador','potencia','potencia_instalada','uso'=>new Zend_Db_Expr('ROUND(100 * potencia / potencia_instalada,2)')));
            $select->joinLeft('contadores_sistemas', 'contadores_sistemas.id = lecturas_sistemas.id_contador',
                array('id_tipo_sistema','id_zona','umbral'));
            $select->where('cm = ?',1);
            $select->where('id_zona = ?',$id_zona);
            $select->where('f_lectura = ?',$fecha);
            $select->order('f_lectura DESC');
            $this->_lecturas[$id_zona][$fecha]=$this->getAdapter()->fetchAll($select);
            
        }

        foreach($this->_lecturas[$id_zona][$fecha] as $v)
        {
              $salida[$v['id_tipo_sistema']][$v['id_contador']]=$v;
        }
        

        return $salida;
    }
    
    */
    
    function getM1($fecha=null)
    {
        if(is_null($fecha)) $fecha = $this->lastFechaLectura(1);
        $z=3;
        $rows = $this->lecturasFecha($fecha,$z);
        
        $salida['derechos'][$z][1]=$rows[5][57];
        $salida['derechos'][$z][2]=$rows[5][59];
        $salida['derechos'][$z][0]=$this->suma($salida['derechos'][$z]);
        
        $salida['contratado'][$z][1]=$rows[4][58];
        $salida['contratado'][$z][2]=$rows[4][60];
        $salida['contratado'][$z][0]=$this->suma($salida['contratado'][$z]);
        
        $salida['cte'][$z][1]=$rows[6][17];
        $salida['cte'][$z][2]=$rows[6][18];
        $salida['cte'][$z][0]=$this->suma($salida['cte'][$z]);
        
        $salida['ups'][$z][1]=$rows[9][20];
        $salida['ups'][$z][2]=$rows[9][21];
        $salida['ups'][$z][3]=$rows[9][22];
        $salida['ups'][$z][0]=$this->suma($salida['ups'][$z]);
        
       
        
        $salida['dc'][$z][1]=$rows[7][23];
        $salida['rs'][$z][1]=$rows[3][24];
        $salida['oficinas'][$z][1]=$rows[11][103];
        
        $salida['total_cliente'][$z][1]=$this->suma(array($salida['ups'][$z][0],$salida['dc'][$z][1],$salida['rs'][$z][1]));
        if($salida['total_cliente'][$z][1]==0)$salida['total_cliente'][$z][1]=null;
        
        unset($salida['total_cliente'][$z][1]['potencia_instalada'],$salida['total_cliente'][$z][1]['uso']);
        
        $salida['grupos'][$z][1]=$rows[2][26];
        $salida['clima'][$z][1]=$rows[1][25];
        $salida['clima'][$z][0]=$this->suma($salida['clima'][$z]);

        $salida['ups'][$z]['redundancia']='2N';
        $salida['grupos'][$z]['redundancia']='N+1';
        $salida['clima'][$z]['redundancia']='N+1';
        $salida['cte'][$z]['redundancia']='N';
        
        return $salida;
    }
    
    function getM2($fecha=null)
    {
        if(is_null($fecha)) $fecha = $this->lastFechaLectura(1);
        $z=4;
        $rows = $this->lecturasFecha($fecha,$z);
        
        $salida['derechos'][$z][1]=$rows[5][55];
        $salida['contratado'][$z][1]=$rows[4][56];
        

        $salida['cte'][$z][1]=$rows[6][28];
        $salida['cte'][$z][2]=$rows[6][29];
        $salida['cte'][$z][3]=$rows[6][30];
        $salida['cte'][$z][4]=$rows[6][109];
        $salida['cte'][$z][5]=$rows[6][114];
        $salida['cte'][$z][6]=$rows[6][115];
        $salida['cte'][$z][0]=$this->suma($salida['cte'][$z]);
        
        $salida['ups'][$z][1]=$rows[9][31];
        $salida['ups'][$z][2]=$rows[9][32];
        $salida['ups'][$z][3]=$rows[9][33];
        $salida['ups'][$z][4]=$rows[9][110];
        $salida['ups'][$z][0]=$this->suma($salida['ups'][$z]);
        
        
        $salida['dc'][$z][1]=$rows[7][34];
        $salida['rs'][$z][1]=$rows[3][35];
        $salida['oficinas'][$z][1]=$rows[11][101];
        
        $salida['total_cliente'][$z][1]=$this->suma(array($salida['ups'][$z][0],$salida['dc'][$z][1],$salida['rs'][$z][1]));
        unset($salida['total_cliente'][$z][1]['potencia_instalada'],$salida['total_cliente'][$z][1]['uso']);
        
        $salida['grupos'][$z][1]=$rows[2][70];
        $salida['grupos'][$z][2]=$rows[2][71];
        $salida['grupos'][$z][0]=$this->suma($salida['grupos'][$z]);
        
        $salida['clima'][$z][1]=$rows[1][36];
        $salida['clima'][$z][2]=$rows[1][113];
        $salida['clima'][$z][0]=$this->suma($salida['clima'][$z]);
        

        $salida['ups'][$z]['redundancia']='2N';
        $salida['grupos'][$z]['redundancia']='N+1';
        $salida['clima'][$z]['redundancia']='N+1';
        $salida['cte'][$z]['redundancia']='N+1';
        
        return $salida;
    }
    
    
    function getB($fecha=null)
    {
        if(is_null($fecha)) $fecha = $this->lastFechaLectura(1);
        $z=1;
        $rows = $this->lecturasFecha($fecha,$z);
        
        $salida['derechos'][$z][1]=$rows[5][61];
        $salida['contratado'][$z][1]=$rows[4][62];
        

        $salida['cte'][$z][1]=$rows[6][37];
        $salida['cte'][$z][0]=$this->suma($salida['cte'][$z]);
        
        $salida['ups'][$z][1]=$rows[9][40];
        $salida['ups'][$z][2]=$rows[9][41];
        $salida['ups'][$z][0]=$this->suma($salida['ups'][$z]);
        
        
        $salida['dc'][$z][1]=$rows[7][43];
        $salida['rs'][$z][1]=$rows[3][44];
        $salida['oficinas'][$z][1]=$rows[11][104];
        
        $salida['total_cliente'][$z][1]=$this->suma(array($salida['ups'][$z][0],$salida['dc'][$z][1],$salida['rs'][$z][1]));
        unset($salida['total_cliente'][$z][1]['potencia_instalada'],$salida['total_cliente'][$z][1]['uso']);
        
        $salida['grupos'][$z][1]=$rows[2][67];
        $salida['grupos'][$z][2]=$rows[2][68];
        $salida['grupos'][$z][0]=$this->suma($salida['grupos'][$z]);
        
        $salida['clima'][$z][1]=$rows[1][45];
        $salida['clima'][$z][0]=$this->suma($salida['clima'][$z]);

        $salida['ups'][$z]['redundancia']='2N';
        $salida['grupos'][$z]['redundancia']='N+1';
        $salida['clima'][$z]['redundancia']='N+1';
        $salida['cte'][$z]['redundancia']='N';

        return $salida;
    }
    
    function getL($fecha=null)
    {
        if(is_null($fecha)) $fecha = $this->lastFechaLectura(1);
        
        $z=2;
        $rows = $this->lecturasFecha($fecha,$z);
        
        $salida['derechos'][$z][1]=$rows[5][65];
        $salida['contratado'][$z][1]=$rows[4][66];
        

        $salida['cte'][$z][1]=$rows[6][50];
        $salida['cte'][$z][0]=$this->suma($salida['cte'][$z]);
        
        $salida['ups'][$z][1]=$rows[9][51];
        $salida['ups'][$z][0]=$this->suma($salida['ups'][$z]);
        
        
        $salida['dc'][$z][1]=$rows[7][52];
        $salida['rs'][$z][1]=$rows[3][53];
        $salida['oficinas'][$z][1]=$rows[11][106];
        
        $salida['total_cliente'][$z][1]=$this->suma(array($salida['ups'][$z][0],$salida['dc'][$z][1],$salida['rs'][$z][1]));
        unset($salida['total_cliente'][$z][1]['potencia_instalada'],$salida['total_cliente'][$z][1]['uso']);
        
        $salida['grupos'][$z][1]=$rows[2][69];
        $salida['clima'][$z][1]=$rows[1][54];
        $salida['clima'][$z][0]=$this->suma($salida['clima'][$z]);
        
        $salida['ups'][$z]['redundancia']='2N';
        $salida['grupos'][$z]['redundancia']='N+1';
        $salida['clima'][$z]['redundancia']='N+1';
        $salida['cte'][$z]['redundancia']='2N';
        return $salida;
    }
    
    function getS($fecha=null)
    {
        
        if(is_null($fecha)) $fecha = $this->lastFechaLectura(1);
        $z=6;
        $rows = $this->lecturasFecha($fecha,$z);
        
        $salida['derechos'][$z][1]=$rows[5][63];
        $salida['contratado'][$z][1]=$rows[4][64];
        

        $salida['cte'][$z][1]=$rows[6][46];
        $salida['cte'][$z][0]=$this->suma($salida['cte'][$z]);
        
        $salida['ups'][$z][1]=$rows[9][47];
        $salida['ups'][$z][0]=$this->suma($salida['ups'][$z]);
        

        $salida['rs'][$z][1]=$rows[3][48];
        $salida['oficinas'][$z][1]=$rows[11][105];
        
        $salida['total_cliente'][$z][1]=$this->suma(array($salida['ups'][$z][0],$salida['dc'][$z][1],$salida['rs'][$z][1]));
        unset($salida['total_cliente'][$z][1]['potencia_instalada'],$salida['total_cliente'][$z][1]['uso']);
        
        $salida['grupos'][$z][1]=$rows[2][72];
        $salida['clima'][$z][1]=$rows[1][49];
        $salida['clima'][$z][0]=$this->suma($salida['clima'][$z]);
       
        $salida['ups'][$z]['redundancia']='2N';
        $salida['grupos'][$z]['redundancia']='N';
        $salida['clima'][$z]['redundancia']='N+1';
        $salida['cte'][$z]['redundancia']='N';
        
        

        return $salida;
    }
    
    function getDatos($zonas=null,$fecha=null){
        
        
        if(is_null($fecha)) $fecha = $this->lastFechaLectura(1);
        
        foreach($zonas as $z)
        {
            switch($z){
                case 1:
                    $data[1]=$this->getB($fecha);
                case 2:
                    $data[2]=$this->getL($fecha);
                case 3:
                    $data[3]=$this->getM1($fecha);
                case 4:
                    $data[4]=$this->getM2($fecha);
                case 6:
                    $data[6]=$this->getS($fecha);
            }
            
            
        }




        foreach($data[4] as $k => $v)
        {
            foreach($zonas as $z)
            {
                $rows[$k][$z]=$data[$z][$k][$z];
                $rows[$k]['global']['potencia']+=$data[$z][$k][$z][1]['potencia'];
                $rows[$k]['global']['potencia']+=$data[$z][$k][$z][2]['potencia'];
                $rows[$k]['global']['potencia']+=$data[$z][$k][$z][3]['potencia'];
                $rows[$k]['global']['potencia']+=$data[$z][$k][$z][4]['potencia'];
                
                $rows[$k]['global']['potencia_instalada']+=$data[$z][$k][$z][1]['potencia_instalada'];
                $rows[$k]['global']['potencia_instalada']+=$data[$z][$k][$z][2]['potencia_instalada'];
                $rows[$k]['global']['potencia_instalada']+=$data[$z][$k][$z][3]['potencia_instalada'];
                $rows[$k]['global']['potencia_instalada']+=$data[$z][$k][$z][4]['potencia_instalada'];
            }
        }
        

        return $rows;
    }
    
    
    function suma($item)
    {
        foreach($item as $v)
        {
            $total['potencia_instalada']+=$v['potencia_instalada'];
            $total['potencia']+=$v['potencia'];
            $total['uso']=round(100*$total['potencia']/$total['potencia_instalada'],2);
        }
        
        if($total['potencia_instalada']==0) $total['potencia_instalada']='';
        if($total['potencia']==0) $total['potencia']='';
        if($total['uso']==0) $total['uso']='';
        
        return $total;
    }
    
    
    
    function lecturasContador($id,$limit='')
    {
        
        $select = $this->getAdapter()->select();
        $select->from(array('lecturas_sistemas'),array('f_lectura','potencia','potencia_instalada','W'=>new Zend_Db_Expr('week(f_lectura)')));
        $select->where('id_contador = ?',$id);
        $select->where('weekday(f_lectura) = ?',4);
        $select->where('potencia IS NOT NULL');
        $select->group(array('WEEK(f_lectura)','YEAR(f_lectura)'));
        $select->order('f_lectura desc');
        if($limit) $select->limit($limit);
        

        
        $rows=$this->getAdapter()->fetchAll($select);
        
        return array_reverse($rows);
        return $rows;
    }
    
    
    function lecturasContadores($ids,$limit='')
    {
        
        $select = $this->getAdapter()->select();
        $select->from(array('lecturas_sistemas'),array('f_lectura','potencia'=>new Zend_Db_Expr('SUM(potencia)'),'potencia_instalada'=>new Zend_Db_Expr('SUM(potencia_instalada)'),'W'=>new Zend_Db_Expr('week(f_lectura)')));
        $select->where('id_contador IN(?)',$ids);
        $select->where('weekday(f_lectura) = ?',4);
        $select->where('potencia IS NOT NULL');
        $select->group(array('WEEK(f_lectura)','YEAR(f_lectura)'));
        $select->order('f_lectura desc');
        if($limit) $select->limit($limit);
        

        
        $rows=$this->getAdapter()->fetchAll($select);
        
        return array_reverse($rows);
        return $rows;
    }
}
